/**
 *
 * @author Sergio Argueta 11029
 * @author Jorge Lainfiesta 11142
 * @date Jul 5, 2012
 */
package Radio; //Agregado por Luis Valdeavellano
import Interface.Radio; //Agregado por Luis Valdeavellano

public class MiniRadio implements Radio {
    private boolean encendido;
    private boolean banda; //True = AM, False = FM
    private float estacionActual;
    private float guardadosFM[];
    private int guardadosAM[];
    private final int CANTIDAD_BOTONES = 12;
    private float lastFM;
    private int lastAM;
    
    /**
     * Constructor. Inicializa variables.
     * La banda default es AM, con frecuencia mínimia, está apagado.
     */
    public MiniRadio(){     
        super();
        this.encendido = false;
        this.banda = true;
        this.estacionActual = Radio.AM_MIN;
        
        this.guardadosAM = new int[CANTIDAD_BOTONES];
        this.guardadosFM = new float[CANTIDAD_BOTONES];
        
        //Las últimas escuchadas serán las minimas
        this.lastAM = Radio.AM_MIN;
        this.lastFM = Radio.FM_MIN;
    }
    
    /**
     * Cambia ON/OFF
     */
    @Override
    public void onOff(){
        this.encendido = !this.encendido;
    }
    
    /**
     * Cambia AM/FM
     */
    @Override
    public void cambiarBanda(){
        if(this.banda){
            //Si era AM, guardar lastAM y cargamos las ultima FM
            this.lastAM = Math.round(this.estacionActual);
            this.estacionActual = this.lastFM;
        }else{
            //Si era FM, guardar lastFM y cargar la ultima AM
            this.lastFM = this.estacionActual;
        this.estacionActual = this.lastAM;
        }
        //Cambiar de banda
        this.banda = !this.banda;
    }
    /**
     * Cambia frecuencia, aumenta 10 si AM y 0.2 si es FM
     */
    @Override
    public void cambiarFrecuencia(){
        if(this.banda){ // Si es AM
            if(this.estacionActual+Radio.AM_D <= Radio.AM_MAX)
                this.estacionActual += Radio.AM_D;
            else
                this.estacionActual = Radio.AM_MIN;
        }else{ //Si es FM
            if(this.estacionActual+Radio.FM_D <= Radio.FM_MAX)
                this.estacionActual += Radio.FM_D;
            else
                this.estacionActual = Radio.FM_MIN;
        }
    }
    /**
     * Retorna la frecuencia actual
     * @return Frecuencia actual
     */
    @Override
    public float getFrecuencia(){
        return this.estacionActual;
    }
    /**
     * Verifica si está encendido
     * @return True si está encendido, false de lo contrario
     */
    @Override
    public boolean isOn(){
        return this.encendido;
    }
    /**
     * Verifica si está en AM
     * @return True si está en AM, false de lo contrario
     */
    @Override
    public boolean isAM(){
        return this.banda;
    }
    /**
     * Verifica si está en FM
     * @return True si está en FM, false de lo contrario
     */
    @Override
    public boolean isFM(){
        return !this.banda;
    }
    /**
     * Guarda la estacion actual en el numero de boton recibido
     * @param Numero de boton
     */
    @Override
    public void guardarEstacion(int boton){
        if(boton>=0 && boton<CANTIDAD_BOTONES){
            if(this.banda)  //Si está en AM, guardar en lista de AM
                this.guardadosAM[boton] = Math.round(this.estacionActual);
            else //Si no, guardar en lista de FM
                this.guardadosFM[boton] = this.estacionActual;
        }
    }
    /**
     * Selecionar la estacion guardada en el boton recibido
     * @param Numero de boton
     */
    @Override
    public void seleccionarEstacion(int boton){
        if(boton>=0 && boton<CANTIDAD_BOTONES){
            if(this.banda){ //Si es AM, cargar de AM
                if(this.guardadosAM[boton] != 0)
                    this.estacionActual = this.guardadosAM[boton];
            }else{ //Si no, cargar de FM
                if(this.guardadosFM[boton] != 0)
                this.estacionActual = this.guardadosFM[boton];
            }
        }
    }
}